import {createRouter, createWebHistory, type RouteRecordRaw} from 'vue-router'
import {usePermissionStore} from "@/stores/premission_store.ts";
import {useAuthStore} from "@/stores/auth_store.ts";

// 静态基础路由
const staticRoutes: RouteRecordRaw[] = [
  {
    path: '/login',
    name: 'login',
    component: () => import('@/views/login/index.vue')
  },
  {
    path: '/error/404',
    name: '404',
    component: () => import('@/views/login/index.vue')
  },
  {
    path: '/container',
    name: 'container', // 关键：必须设置 name
    component: () => import('@/components/container/index.vue'),
    children: [
      // 固定子路由示例（如首页）
      {
        path: '/home', // 注意：使用相对路径（非 /home）
        name: 'home',
        component: () => import(/* @vite-ignore */'@/views/home/index.vue')
      }
    ]
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes: staticRoutes
})

// 动态路由处理工具
export const dynamicRouter = {

  /**
   * 重置路由到初始状态
   */
  reset() {
    router.getRoutes().forEach(route => {
      if (route.name !== 'login' && route.name !== 'container') {
        router.removeRoute(route.name!)
      }
    })
  }
}


// 导航守卫
router.beforeEach(async (to, from, next) => {
  const authStore = useAuthStore()
  const permissionStore = usePermissionStore()

  // 1. 白名单路由直接放行
  if (['/login'].includes(to.path)) {
    if (authStore.isLoggedIn) {
      return next('/container')  // 如果已登录，访问登录页则重定向到首页
    }
    return next()
  }

  // 2. 未登录，重定向到登录页
  if (!authStore.isLoggedIn) {
    return next({
      path: '/login',
      query: {redirect: to.fullPath}  // 保存原始请求路径
    })
  }

  // 3. 已登录但未加载动态路由
  if (!permissionStore.routesLoaded) {
    try {
      await permissionStore.generateRoutes()
      // 标记路由已加载
      permissionStore.routesLoaded = true
      // 重定向到原始请求
      return next({...to, replace: true})
    } catch (err) {
      console.error('加载动态路由失败:', err)
      // 清除登录状态
      authStore.logout()
      // 重定向到登录页
      return next({
        path: '/login',
        query: {redirect: to.fullPath}
      })
    }
  }

  // 4. 正常放行
  next()
})

export default router
